package org.jeecg.modules.fund.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.fund.entity.FundLibrary;
import org.jeecg.modules.fund.entity.FundValue;
import org.jeecg.modules.fund.model.FundValTotalModel;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface FundValueMapper extends BaseMapper<FundValue> {
    /**
     * 动态生成表格
     *
     * @param tableName
     */
    void createTable(@Param("tableName") String tableName);

    /**
     * 表是否存在
     *
     * @param tableName
     * @return
     */
    int isExistTable(@Param("tableName") String tableName);


    /**
     * 批量更新
     *
     * @param tableName
     * @param list
     */
    void batchUpdate(@Param("tableName") String tableName, @Param("list") List<FundValue> list);

    /**
     * 插入或更新
     *
     * @param tableName
     * @param val
     */
    void insertOrUpdate(@Param("tableName") String tableName, @Param("valParams") FundValue val);


    /**
     * 批量插入或更新
     *
     * @param tableName
     * @param list
     */
    void batchInsertOrUpdate(@Param("tableName") String tableName, @Param("list") List<FundValue> list);

    /**
     * 根据ID查找
     *
     * @param tableName
     * @param id
     * @return
     */
    FundValue findById(@Param("tableName") String tableName, @Param("id") String id);

    /**
     * 根据ID删除
     *
     * @param tableName
     * @param id
     * @return
     */
    int delById(@Param("tableName") String tableName, @Param("id") String id);

    /**
     * 获取指定时间段总值
     *
     * @param tableName
     * @param fundId
     * @param startDate
     * @param endDate
     * @return
     */
    FundValTotalModel get60ValTotal(@Param("tableName") String tableName, @Param("fundId") String fundId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取列表
     *
     * @param fundId
     * @param startDate
     * @param endDate
     * @return
     */
    List<FundValue> findList(@Param("tableName") String tableName, @Param("fundId") String fundId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取列表
     *
     * @param fundId
     * @param startDate
     * @param endDate
     * @return
     */
    List<FundValue> findValueAvgList(@Param("tableName") String tableName, @Param("fundId") String fundId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取line60
     *
     * @param tableName
     * @param fundId
     * @param valDate
     * @return
     */
    FundValue findValueAvg(@Param("tableName") String tableName, @Param("fundId") String fundId, @Param("valDate") Date valDate);

    /**
     * 批量更新Line60
     *
     * @param tableName
     * @param valDate
     * @param list
     */
    void updateLine60(@Param("tableName") String tableName, @Param("valDate") Date valDate, @Param("list") List<FundValue> list);

    /**
     * 查询line60通过日期
     *
     * @param tableName
     * @param valDate
     */
    List<FundValue> findValueAvgByDate(@Param("tableName") String tableName, @Param("valDate") String valDate);

    /**
     * 获取分页
     * @param page
     * @param fundValue
     * @return
     */
    IPage<Map<String,Object>> selectPageVo(@Param("tableName") String tableName, IPage<FundValue> page, @Param("val") FundValue fundValue);

    /**
     * 根据日期和fundId获取基金净值信息
     * @param tableName
     * @param valDate
     * @param fundId
     * @return
     */
    FundValue selectByDateAndFundId(@Param("tableName") String tableName, @Param("valDate") String valDate,@Param("fundId") String fundId);
}
